package abd.pr1.Controllers;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import javax.sql.DataSource;

import org.apache.commons.lang3.StringUtils;

import abd.pr1.Interface.AdminEditarEpisodioWindow;
import abd.pr1.Interface.EpisodioWindow;
import abd.pr1.Interface.NuevoActorPersonajeWindow;
import abd.pr1.Interface.SerieWindow;
import abd.pr1.Mappers.ActoresMapper;
import abd.pr1.Mappers.ClavePersonajeActor;
import abd.pr1.Mappers.ClaveSeguidor;
import abd.pr1.Mappers.EpisodiosMapper;
import abd.pr1.Mappers.GenerosMapper;
import abd.pr1.Mappers.PersonajesActoresMapper;
import abd.pr1.Mappers.PersonajesMapper;
import abd.pr1.Mappers.SeguidoresMapper;
import abd.pr1.Mappers.SeriesGenerosMapper;
import abd.pr1.Mappers.SeriesMapper;
import abd.pr1.Models.Actor;
import abd.pr1.Models.Episodio;
import abd.pr1.Models.Genero;
import abd.pr1.Models.Personaje;
import abd.pr1.Models.PersonajeActor;
import abd.pr1.Models.Seguidor;
import abd.pr1.Models.Serie;
import abd.pr1.Models.SerieGenero;
import abd.pr1.Models.Usuario;

public class AdminEditarEpisodioWindowController implements ActionListener{

	
	
	private EditarSerieWindowController editarSerieWindowController;
	private AdminEditarEpisodioWindow adminEditarEpisodioWindow;
	private DataSource ds;
	private Episodio episodio;
	
	public AdminEditarEpisodioWindowController(EditarSerieWindowController editarSerieWindowController, AdminEditarEpisodioWindow adminEditarEpisodioWindow,DataSource ds, Episodio episodio){
		
		this.editarSerieWindowController= editarSerieWindowController;
		this.adminEditarEpisodioWindow=adminEditarEpisodioWindow;
		this.ds=ds;
		this.episodio=episodio;
		
		this.adminEditarEpisodioWindow.addListener(this);
		
		refreshEpisodio();
	}
	
	public void refreshEpisodio(){
		adminEditarEpisodioWindow.setNombre(episodio.getNombre());
		adminEditarEpisodioWindow.setSinopsis(episodio.getSinopsis());
		adminEditarEpisodioWindow.setEstreno(episodio.getEstreno());
		adminEditarEpisodioWindow.setOrden(episodio.getOrden());
		adminEditarEpisodioWindow.setTemporada(episodio.getTemporada());
		
		List<PersonajeActor> personajeActor = new PersonajesActoresMapper(ds).queryByExample(new PersonajeActor(null, null, episodio.getId()));
		List<Actor> actores = new ArrayList<Actor>();
		List<Personaje> personajes = new ArrayList<Personaje>();
		
		for (int i = 0; i < personajeActor.size(); i++) {
			 actores.add(new ActoresMapper(ds).findById(personajeActor.get(i).getId_actor()));
			 personajes.add(new PersonajesMapper(ds).findById(personajeActor.get(i).getId_personaje()));
		}
		adminEditarEpisodioWindow.setActoresPersonajesTable(actores, personajes);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		Serie serie= new SeriesMapper(ds).findById(episodio.getId_serie());
		
		if(e.getActionCommand().equals("cerrar_episodio")){
			 adminEditarEpisodioWindow.dispose();
		}else if(e.getActionCommand().equals("borrar_episodio")){
			if(new EpisodiosMapper(ds).delete(episodio)){
				editarSerieWindowController.refreshSerie();
				new EpisodiosMapper(ds).updateEstrenoSerie(serie);
				adminEditarEpisodioWindow.dispose();
			}
		}else if(e.getActionCommand().equals("guardar_episodio")){
			String nombre = adminEditarEpisodioWindow.getNombre();
			String sinopsis = adminEditarEpisodioWindow.getSinopsis();
			int orden = Integer.parseInt(adminEditarEpisodioWindow.getOrden());
			int temporada = Integer.parseInt(adminEditarEpisodioWindow.getTemporada());
			Date estreno = adminEditarEpisodioWindow.getEstreno();

			episodio.setNombre(nombre);
			episodio.setSinopsis(sinopsis);
			episodio.setOrden(orden);
			episodio.setTemporada(temporada);
			episodio.setEstreno(estreno);
			
			new EpisodiosMapper(ds).update(episodio);
			editarSerieWindowController.refreshSerie();
			new EpisodiosMapper(ds).updateEstrenoSerie(serie);
			adminEditarEpisodioWindow.dispose();
		} else if(e.getActionCommand().equals("borrar_actor_personaje")){
			int[] ids = adminEditarEpisodioWindow.getActorPersonajeSelected();
			if(ids!=null){
				PersonajeActor personajeActor = new PersonajesActoresMapper(ds).findById(new ClavePersonajeActor(ids[1], ids[0], this.episodio.getId()));
				new PersonajesActoresMapper(ds).delete(personajeActor);
				this.refreshEpisodio();
			}
		}else if(e.getActionCommand().equals("nuevo_actor_personaje")){
			new NuevoActorPersonajeWindowController(this, new NuevoActorPersonajeWindow(), ds, episodio);
		}
	}


	
}
